package wangshuai.risk.dao.impl;

import java.sql.SQLException;
import java.util.List;

import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Component;

import publics.model.Balance;
import wangshuai.risk.dao.BalanceDao;

/**
 * 资产负债表的增删改查
 * @author wangshuai
 *
 */
@Component("balanceDao")//让spring扫描到这个bean
public class BalanceDaoImpl implements BalanceDao {
	
	private HibernateTemplate hibernateTemplate;// hibernate的spring代理模版

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}

	// 注入 hibernate模版
	@Resource(name = "hibernateTemplate")	
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
		System.out.println("hibernateTemplate injected in BalanceDaoImpl!");
		// 测试用，实际运行中可去掉这句
	}
	
	
	/**
	 * 保存资产负债表
	 * @param balance 要保存的资产负债表的实例
	 */
	public Integer sava(Balance balance){	
		return (Integer)this.getHibernateTemplate().save(balance);
	}
	
	/**
	 * 更新资产负债表
	 * @param  balance 要更新的资产负债表实例
	 */
	public void update(Balance balance){
		this.getHibernateTemplate().update(balance);
	}

	/**
	 * 保存或修改资产负债表
	 * @param balance 要修改或保存资产负债表的实例
	 */
	public void saveOrUpdate(Balance balance) {
		this.getHibernateTemplate().saveOrUpdate(balance);

	}
	
	/**
     * 删除资产负债表
     * @param id 需要删除的资产负债表id
     */  
	public void deleteById(Integer id) {
		this.getHibernateTemplate().delete(this.getHibernateTemplate().get(Balance.class, id));
	}
	
	/**
     * 删除资产负债表
     * @param balance 要删除的资产负债表实例
     */
    public void delete(Balance balance){
    	this.getHibernateTemplate().delete(balance);
    	
    }
	
	/**
	 * 根据企业的ID查找资产负债表
     * @param  entId 企业的ID号（主键）
     * @return 查到的所有该企业的资产负债表
	 */
	@SuppressWarnings("unchecked")
	public List<Balance> findByEntId(Integer entId) {
		return (List<Balance>)this.getHibernateTemplate()
			.find("from Balance b where b.Ent_id=?", entId);
	}
	
	/**
	 * 据资产负债表id查找 
	 * @param 资产负债表id
     * @return id对应的资产负债表
	 */
	public Balance findById(Integer id) {
		
		return this.getHibernateTemplate().get(Balance.class, id);
	}
	
	/**
	 * 查询所有资产负债表信息
	 * @param hql 需要查询的hql语句
	 * @param offset 起始条目偏移量（offset == （页码-1）*每页条数  ， 不知道对不对，忘了，页码不知是从0开始还是1开始）
	 * @param pageSiz  查询每页的条目数
	 * @return 查询出的资产负债表(结果集)
	 */
	@SuppressWarnings("unchecked")
	public List<Balance> findByPage(final String hql, final int offset, final int pageSize) {
		List<Balance> list = this.getHibernateTemplate().executeFind(
				new HibernateCallback() {
					public Object doInHibernate(Session session) throws HibernateException ,SQLException {
						//执行hibernate分页查询
						List<Balance> result = session.createQuery(hql)
							.setFirstResult(offset)
							.setMaxResults(pageSize)
							.list();
						return result;
					}
				}
				);
		
		return list;
	}


}
